package com.example.miscontactos;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.example.miscontactos.Entidades.MensajesWebsEntity;
import com.example.miscontactos.Entidades.NombreAccion;
import com.example.miscontactos.Entidades.RegistracionUserWeb;

import BaseDeDatos.AccesoABaseDeDatos;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.AdapterContextMenuInfo;

public class ListaMensajesWebs extends ListActivity 
{
	private SharedPreferences preferencias;
	Map<Integer,Integer> map = new HashMap<Integer, Integer>();
	private int accionIdPosition;
	private static final int MENU_NUEVO_MENSAJE = 1;
	private static final int MENU_BUSCAR_MENSAJES = 2;
	private static final int MENU_PREFERENCIAS = 3;
	private static final int MENU_RESPONDER_MENSAJE = 1;
	private static final int MENU_BORRAR_MENSAJE = 	2;
	private static final String FROM = "from";
	private String ordenFecha = "";
	private String ordenNombre = "";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{	
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lista_mensajes_webs);
		
		getOrden();
		Cursor cur = AccesoABaseDeDatos.getMensajesWebsRecibidos(this, NombreAccion.MensajeWeb, ordenNombre, ordenFecha);
		
		if (cur.getCount() > 0)
		{
			MensajesWebsEntity[] mensajes_data = cargarDatos(cur);
			
			MensajeWebAdapter adapter = new MensajeWebAdapter(this, 
	                R.layout.fila_mensaje_web, mensajes_data);
			
			setListAdapter(adapter);
	        registerForContextMenu(getListView());
		}
		else
		{
			String[] values = new String[] { getResources().getString (R.string.historial_sin_mensaje_webs) };
			ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
					  android.R.layout.simple_list_item_1, android.R.id.text1, values);
			setListAdapter(adapter);
		}		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) 
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		menu.add(MENU_NUEVO_MENSAJE, MENU_NUEVO_MENSAJE, 0, getResources().getString(R.string.menu_mensaje_web_nuevo));
		menu.add(MENU_BUSCAR_MENSAJES, MENU_BUSCAR_MENSAJES, 0, getResources().getString(R.string.menu_traer_mensajes));
		menu.add(MENU_PREFERENCIAS, MENU_PREFERENCIAS, 0, getResources().getString(R.string.menu_preferencias));
    	return true;
	}
	
	@Override
    public boolean onOptionsItemSelected(MenuItem item) 
    {
		Intent intent;
    	switch (item.getItemId()) 
    	{
    		case MENU_NUEVO_MENSAJE:
    			intent = new Intent(ListaMensajesWebs.this, CrearMensajeWeb.class);
    	    	startActivity(intent);
                return true;
    		case MENU_BUSCAR_MENSAJES:
    			String fecha = "";
    			Cursor cur = AccesoABaseDeDatos.traerUltimoMensajeGuardado(this);
    			cur.moveToFirst();   			
    			if (cur.getCount() > 1)
    				fecha = cur.getString(0);    			
    			byte[] xml = RegistracionUserWeb.buscarMensajes("nicolas", "intel123", fecha);
    			Utilities.pullMensajesWebs(xml, ListaMensajesWebs.this);
    			reStartActivity();
    			return true;
    		case MENU_PREFERENCIAS:
    			intent = new Intent(ListaMensajesWebs.this, Preferencias.class);
    	    	startActivity(intent);
                return true;
        }
    	return true;
    }
	
	private void reStartActivity()
	{
		Intent intent = getIntent();
		finish();
		startActivity(intent);
	}	
	
	private void getOrden()
	{
		preferencias = PreferenceManager.getDefaultSharedPreferences(this);
		Boolean asc = preferencias.getBoolean("orden_mensajes_webs", false);
		
		if (asc)
		{
			ordenFecha = "DESC";
		}
		else 
		{
			ordenFecha = "ASC";
		}
		
		asc = preferencias.getBoolean("orden_mensajes_webs_nombre", false);
		
		if (asc)
		{
			ordenNombre = "DESC";
		}
		else 
		{
			ordenNombre = "ASC";
		}
	}
	
	public MensajesWebsEntity[] cargarDatos(Cursor cur)
	{
		MensajesWebsEntity mnensajes_data[] = new MensajesWebsEntity[cur.getCount()];
		ArrayList<MensajesWebsEntity> mensajes = new ArrayList<MensajesWebsEntity>();
		
		cur.moveToFirst();
		
		do
	    {
			MensajesWebsEntity item = new MensajesWebsEntity();
			item.id = cur.getInt(0);
			item.from = cur.getString(3);
			item.mensaje = cur.getString(5);
			item.fecha = cur.getString(6);
			mensajes.add(item);
		}while (cur.moveToNext());
		
		mnensajes_data = new MensajesWebsEntity[mensajes.size()];
		mnensajes_data = mensajes.toArray(mnensajes_data);
		
		return mnensajes_data;
	}
			
	//Metodo que se llama para crear el menu contextual.
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
    {
		super.onCreateContextMenu(menu, v, menuInfo);
		MenuInflater inflater = getMenuInflater();
		menu.clear();
		menu.setHeaderTitle(getResources().getString(R.string.titulo_menu_contextual));
		menu.addSubMenu(0, MENU_RESPONDER_MENSAJE, 0, getResources().getString(R.string.sub_menu_responder));
		menu.addSubMenu(0, MENU_BORRAR_MENSAJE, 0, getResources().getString(R.string.sub_menu_borrar_accion));		
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
		accionIdPosition = info.position;
		inflater.inflate(R.menu.contact_menu, menu);
	}
	
	@Override
    public boolean onContextItemSelected(MenuItem item) 
    {
		switch (item.getItemId()) 
    	{
    		case MENU_RESPONDER_MENSAJE:
    			Intent intent = new Intent(ListaMensajesWebs.this, CrearMensajeWeb.class);
    			intent.putExtra(FROM, item.getTitle());
    	    	startActivity(intent);
                return true;
    		case MENU_BORRAR_MENSAJE:
    			int id = map.get(accionIdPosition);
    	    	AccesoABaseDeDatos.borrarAccionHistorial(this, id);
    	    	reStartActivity();
        }
    	return true;
    }
	
	public class MensajeWebAdapter extends ArrayAdapter<MensajesWebsEntity>
	{

        Context context; 
        int layoutResourceId;    
        MensajesWebsEntity data[] = null;
        
        public MensajeWebAdapter(Context context, int layoutResourceId, MensajesWebsEntity[] data) 
        {
            super(context, layoutResourceId, data);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.data = data;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            View row = convertView;
            MensajesWebsHolder holder = null;
            final MensajesWebsEntity mensaje = data[position];
            
            if(row == null)
            {
                LayoutInflater inflater = ((Activity)context).getLayoutInflater();
                row = inflater.inflate(layoutResourceId, parent, false);
                
                holder = new MensajesWebsHolder();
                holder.nombreContacto = (TextView)row.findViewById(R.id.txtNombreContacto);
                holder.fechaMensaje = (TextView)row.findViewById(R.id.txtFecha);
                holder.imgMensajeWeb = (ImageView)row.findViewById(R.id.imagenMensajeWeb);
                
                holder.imgMensajeWeb.setOnClickListener(new OnClickListener() {
        	        public void onClick(View v) 
        	        {
        	        	//AccionesUtilities.MandarMensaje(MensajesWebs.this, String.valueOf(contactoId), tel.numeroTelefono.toString(), "", "", NombreAccion.Mensaje, "");
        	        }
        	    });
                
                row.setTag(holder);
            }
            else
            {
                holder = (MensajesWebsHolder)row.getTag();
            }
                                   
            holder.nombreContacto = SetearLayoutTexto(holder.nombreContacto, mensaje.from);
            holder.fechaMensaje = SetearLayoutTexto(holder.fechaMensaje, mensaje.fecha);
            holder.imgMensajeWeb = SetearLayoutImagen(holder.imgMensajeWeb);
            map.put(position, mensaje.id);
            holder.imgMensajeWeb.setImageResource(R.drawable.mensajes);
            
            return row;
        }
                
        private TextView SetearLayoutTexto(TextView txtView, String texto)
        {
        	LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)txtView.getLayoutParams();
        	params.setMargins(20, 0, 0, 0);
        	txtView.setLayoutParams(params);
        	txtView.setText(texto);
        	return txtView;
        }
        
        private ImageView SetearLayoutImagen(ImageView imgAccion)
        {
        	LinearLayout.LayoutParams params = 
                    new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                                    LayoutParams.WRAP_CONTENT);
        	params.setMargins(15, 0, 0, 0);
        	imgAccion.setLayoutParams(params);
            imgAccion.getLayoutParams().height = 70;
            imgAccion.getLayoutParams().width  = 55;
            return imgAccion;
        }
        
        public class MensajesWebsHolder
        {
            TextView nombreContacto;
            TextView fechaMensaje;
            ImageView imgMensajeWeb;
        }
    }

}
